2. SystemVerilog Function

函数

函数的基本语法

function [return_type] function_name(input_arguments);
  // 函数体
endfunction

返回类型

输入参数

Example:

function int add(int a, int b);
  return a + b;
endfunction

函数的使用

Example:

module tb;
  initial begin
    int result = add(3, 4); // 调用函数并存储结果
    $display("Result = %0d", result); // 输出: Result = 7
  end

  function int add(int a, int b);
    return a + b;
  endfunction
endmodule

函数的特性

无时序控制

自动变量

Example:

function int counter();
  static int count = 0; // 静态变量
  count++;
  return count;
endfunction

函数的返回值

Example:

function int max(int a, int b);
  if (a > b)
    return a;
  else
    return b;
endfunction

函数的参数

输入参数

输出参数

Example:

function void swap(ref int a, ref int b);
  int temp;
  temp = a;
  a = b;
  b = temp;
endfunction

module tb;
  initial begin
    int x = 10;
    int y = 20;
    swap(x, y); // 调用函数
    $display("x = %0d, y = %0d", x, y); // 输出: x = 20, y = 10
  end
endmodule

递归函数

Example:

function int factorial(int n);
  if (n == 0)
    return 1;
  else
    return n * factorial(n - 1);
endfunction

module tb;
  initial begin
    int result = factorial(5); // 计算 5!
    $display("Factorial of 5 is %0d", result); // 输出: Factorial of 5 is 120
  end
endmodule

包中的函数

Example:

package math_pkg;
  function int add(int a, int b);
    return a + b;
  endfunction
endpackage

module tb;
  import math_pkg::*;
  initial begin
    int result = add(3, 4); // 调用包中的函数
    $display("Result = %0d", result); // 输出: Result = 7
  end
endmodule